package com.kakame.tibbers.service.auth;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.kakame.tibbers.common.init.cache.UserCache;
import com.kakame.tibbers.common.models.AuthResource;
import com.kakame.tibbers.common.models.AuthUser;

public class ResourceService {
	
	/**
	 * 查询全部权限数据
	 * @author 何家明
	 * @date   2018年11月24日 下午8:25:06
	 * @return
	 */
	public List<AuthResource> list() {
		return AuthResource.dao.find("select * from t_auth_resource where status = 'C'");
	}

	/**
	 * 查询用户拥有的资源
	 * @author 何家明
	 * @date   2018年11月24日 下午9:01:44
	 * @return
	 */
	public Map<String, List<AuthResource>> listRelations() {
		Map<String, List<AuthResource>> map = new HashMap<>();
		// 1.查询出所有的用户
		List<AuthUser> users = UserCache.me.list();
		// 2.查询出所有用户拥有的角色、角色拥有的资源、合并用户拥有的资源
		StringBuilder sql = new StringBuilder();
		sql.append("select u.id user_id, re.resource_code, re.resource_name, re.resource_type, re.resource_url ");
		sql.append("  from t_auth_user u ");
		sql.append("  left join t_auth_user_role ur on u.id = ur.user_id ");
		sql.append("  left join t_auth_role r on ur.role_id = r.id ");
		sql.append("  left join t_auth_role_resource rr on r.id = rr.role_id ");
		sql.append("  left join t_auth_resource re on rr.resource_id = re.id ");
		sql.append(" where u.status = 'C' and r.status = 'C' and re.status = 'C' ");
		List<AuthResource> userAuths = AuthResource.dao.find(sql.toString());
		
		
		for (AuthUser u : users) {
			List<AuthResource> rs = new ArrayList<>();
			for (AuthResource r : userAuths) {
				if(u.getId() == r.getUserId()) {
					rs.add(r);
				}
			}
			map.put(u.getId() + "", rs);
		}
		return map;
	}
}
